/**
 * es5 类的创建和继承
 */
// 父类
function Parent(name) {
  // 实例的属性
  this.name = name
}

// 定义静态属性 =》不在实例
Parent.a = 1;
Parent.fn = function () {
  console.log(this.abc, Parent.a)
}



// 原型方法
Parent.prototype.getName = function () {
  console.log(this.name)
}

// 子类：继承 
function Child(name) {
  // 继承实例的属性
  Parent.call(this, name)
}

// Child.prototype = new Parent();
Child.prototype = Object.create(Parent.prototype, {
  constructor: {
    value: Child
  }
})

// 测试
let Chi = new Child('普京');
console.log(Chi)


/**
 * es6类的创建和继承
 * 关键字：class => 语法糖
 */
// 父类
class Pare {
  constructor(name) {
    // 实例属性
    this.name = name
  }
  // 实例方法
  getName() {
    console.log(this.name)
  }

  // 定义静态属性
  static a = 10000;
  static fn = () => {
    console.log(111)
  }
}

// 子类：继承
class Chil extends Pare {
  // constructor(name) {
  //   super(name);
  //   // 其它的实例属性
  //   this.age = 100
  // }

  age = 100;
  oth = 'yui'

  // 箭头函数this的确定：书写的时候就确定
  // 不能改变
  fn = () => {
    console.log(this.oth)
  }

  getAge() {
    // 调用者是谁 =》 this就指向谁
    console.log(this.age)
  }

}

let Nchil = new Chil('特朗普')
console.log('继承完的子类：', Nchil)
